package com.my.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;


/**
 * @author Maple.Chen
 * @date 2020年9月29日
 * @description <p>自定义注解</p>
 * JDK5后提供的四个基本的元注解如下：
 * @Target、@Retention、@Documented、@Inherited
 */
// 当前实现一个叫@Test的注解
@Documented // 代表这个注解，可以被javadoc 处理的（加不加都行）
@Retention(RetentionPolicy.RUNTIME)
// RetentionPolicy 生命周期，一共有三个
// SOURCE 只留在源码，编译好后的代码是不有该注解的，该注解一旦编译就不存在了 ；
// class 只停留在字节码，运行时不会有；
// RUNTIME 运行时需要反射来获取该注解
@Target(ElementType.FIELD)
//@Target({ElementType.TYPE,ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE, ElementType.PACKAGE, ElementType.ANNOTATION_TYPE})
// 该注解打在哪个地方，方法，参数，类。。。。。。
public @interface NotNull {
	
	/**
	 * 设置参数名，用于校验回显找出指定成员变量
	 * @return
	 */
	String fieldName() default "未标注属性";
	
	/**
	 * 若needBao=true,则不对该属性进行非空校验
	 */
	boolean needBao();
}
